//接口


//接口属性
// sex?: string 问号表示这熟悉可以没有
// readonly zd: number, 表示自读，一些对象属性只能在对象刚刚创建的时候修改其值。一旦赋值后再也不能被改变了。 也就是说只读属性只能赋值一次。
//被自读秀死过的变量必须在初始化时赋值，类就在构造函数，普通变量就在声明时直接赋值。
interface IPerson {

    id: number
    name: string
    age: number
    readonly zd: number,
    sex?: string
}

const person: IPerson = {
    id: 1,
    zd: 12,
    name: 'tom',
    age: 20,
    // sex: '男' // 可以没有
}


// 接口参数
//接口可以描述函数类型(参数的类型与返回的类型)
interface ICar {
    //（参数列表）:返回值类型
    (color: string, size: number): unknown
}

const Car: ICar = (color: string, size: number) => <unknown>{}


//接口实现
//一个类可以实现多个接口
 interface  Ibird{
    fly():unknown
 }
interface IFish{
    swim():void
}
class  FlyingFish implements Ibird,IFish{
    fly(): unknown {
        console.log('飞鱼在飞')
        return undefined;
    }

    swim(): void {
        console.log('飞鱼在游')
    }
}




//接口继承可以多继承
interface IPigeon extends Ibird, Ibird {
    laugh():void
}

class unaware implements IPigeon {
    coding(): boolean {
        return false;
    }

    fly(): unknown {
        return undefined;
    }

    laugh(): void {
    }

}



export default {person}
